#include "tools.h"
#include "headmaster.h"
#include "struct.h"
#define HEAD_INI_PW "9999"	//校长初始密码
char head_name[20]={};
char head_pw[20]={};
char key2[20]={};
char name[20]={};
char key[20]={};
int id_head=0;


// 校长文件读取
void load_in_head(void)
{
	FILE* frp_head = fopen("headmaster.txt","r");		// 进入校长文件，只读
	if(NULL == frp_head)		// 判断是否为空
	{
		perror("fopen");
		return;
	}
	fscanf(frp_head,"%s %s\n",head_name,head_pw);		// 读取校长用户名和密码
	fclose(frp_head);		// 关闭
}

// 校长文件保存
void save_in_head(void)
{
	FILE* fwp_head = fopen("headmaster.txt","w+");		// 进入校长文件，写
	if(NULL == fwp_head)		// 判断是否为空
	{
		perror("fopen");
		return;
	}
	fprintf(fwp_head,"%s %s\n",head_name,head_pw);		// 写入校长用户名和密码
	fclose(fwp_head);		// 关闭
}



// 第一次登录修改密码
void change_head_pw(void)
{	
	for(;;)
	{
		printf("\n*密码长度最多为19");		// 提示输入密码，两次输入确认密码
		printf("\n第一次登录，请重置密码:");
		get_pw(key);
		printf("\n*密码长度最多为19");
		printf("\n请确认密码：\n");
		get_pw(key2);
		if(strcmp(key,key2))		// 判断两次输入的密码是否相同
		{
			show_msg("\n两次密码不一致！",3);
			continue;
		}
		if(0 == strcmp(key,HEAD_INI_PW))		// 判断修改的后的密码是否与初始密码相同
		{
			show_msg("密码不能与初始密码相同请重新修改\n",2);
			continue;
		}
		strcpy(head_pw,key2);		// 将修改后的密码保存在文件中
		save_in_head();
		printf("\n修改后的密码为：%s\n",head_pw);		// 显示修改后的密码，自行判断是否为想要的密码
		printf("密码修改成功\n");
		anykey_continue();		// 按任意键继续
		return;
	}
}


// 重置老师密码
void reset_tch_pw(void)
{
	load_tch();		// 进入教师文件中
	for(;;)
	{
		printf("请输入需要重置密码的老师的工号：");		// 以工号查找老师
		scanf("%d",&id_head);
		for(int i=0;i<TEA_MAX;i++)		// 判断是否有这个老师
		{
			if(0 == tea[i].state)
			{
				show_msg("没有这个老师请再次输入\n",2);
				break;
			}
			if(id_head==tea[i].id)		// 将老师的密码重置为初始密码
			{
				strcpy(tea[i].pw,TEA_INI_PW);
				tea[i].lock=0;
				save_tch();
				printf("修改后的密码为：%s",tea[i].pw);		// 提醒重置后的密码
				show_msg("密码修改成功",2);
				return;
			}
		}
	}
}


// 重置校长密码
void reset_head_pw(void)
{
	strcpy(head_pw,HEAD_INI_PW);		// 将校长密码重置为初始密码
	save_in_head();
	printf("新密码为：%s\n",head_pw);		// 提示重置后的密码
	show_msg("密码修改成功",2);
	return;
}


// 添加老师
void add_tch(void)
{
	load_tch();		// 进入教师文件
	int cnt = 0;		// 计数
	while(tea[cnt].sex!=0) cnt++;		// 记录一共有几个老师（包括已离职的）
	printf("请输入老师姓名 性别(m/w)：");		// 输入老师姓名和性别，其余信息自动添加
	scanf("%s %c",tea[cnt].name,&tea[cnt].sex);
	tea[cnt].id=TEA_INI_ID+cnt;		// 初始工号加总教师数
	strcpy(tea[cnt].pw,TEA_INI_PW);		// 密码为初始密码
	tea[cnt].lock = 0;		// 帐号锁定状态为0
	tea[cnt].state = '1';		// 职业状态为在职
	count_tea++;		// 已有老师数量加一
	save_tch();		// 保存，将新老师数据计入教师文件中
	show_msg("添加老师成功！",3);
	return;
}


// 删除老师
void del_tch(void)
{
	load_tch();
	for(;;)
	{
		printf("请输入要删除的老师的工号：");		// 按工号查找老师
		scanf("%d",&id_head);
		for(int i=0;i<TEA_MAX;i++)
		{
			if(!tea[i].id)		// 判断是否有该老师
			{
				show_msg("没有找到该老师，请重新输入！\n",2.5);
				break;
			}
			if(tea[i].id == id_head)		// 找到老师，将就职状态改为离职
			{
				tea[i].state='2';
				show_msg("删除成功！",2.5);
				save_tch();		// 保存，将新状态计入教师文件中
				return;
			}
			
		}
	}
	
}


// 显示所有在职老师
void show_in_tch(void)
{
	load_tch();
	for(int i=0;i<TEA_MAX;i++)
	{
		if('1' == tea[i].state)		// 如果就职状态为在职则将所有在职教师的信息显示
		{
			printf("%s %s %c %c %d %d\n",tea[i].name,tea[i].pw,tea[i].sex,tea[i].state,tea[i].id,tea[i].lock);
		}
	}
	anykey_continue();
	return;
}


// 显示所有离职老师
void show_out_tch(void)
{
	load_tch();
	for(int i=0;i<TEA_MAX;i++)		// 如果就职状态为离职则将所有离职教师的信息显示
	{
		if('2' == tea[i].state)
		{
			printf("%s %s %c %c %d %d\n",tea[i].name,tea[i].pw,tea[i].sex,tea[i].state,tea[i].id,tea[i].lock);
		}
	}
	anykey_continue();
	return;
}

// 解除教师锁定状态
void unlock_tch(void)
{
	load_tch();
	for(;;)
	{
		printf("请输入教师工号:");		// 按工号查找教师
		scanf("%d",&id_head);
		for(int i=0;i<TEA_MAX;i++)
		{
			if(!tea[i].state)		// 判断是否有这个老师
			{
				show_msg("没有这个老师请再次输入\n",2);
				break;
			}
			if(id_head==tea[i].id)		//找到老师，将锁定状态重新置为0
			{
				tea[i].lock=0;
				save_tch();
				printf("解锁成功！");
				anykey_continue();
				return;
			}
		}
		
	}
}

// 校长登录判定
void head_login(void)
{
	load_in_head();		// 读取校长文件
    printf("请输入用户名：");
    scanf("%s",name);
    printf("请输入密码：");
    get_pw(key);
    if(strcmp(name,head_name)||strcmp(key,head_pw))// 判断用户名和密码，一错即错
    {
        show_msg("用户名或者密码错误，请重新输入！\n",2);
        return;
    }
    if(0==strcmp(key,HEAD_INI_PW))		// 判断是否为初始密码，若是先则修改密码，再进入校长系统
    {
        change_head_pw();
   		head_start();
		return;
    }
	head_start();		// 不是初始密码则直接进入校长系统
}



// 校长子系统菜单
char head_menu(void)
{
    system("clear");
    puts("------欢迎进入吴凯牌校长子系统------");
    puts("|         1、重置老师密码          |");
    puts("|         2、重置校长密码          |");
    puts("|         3、添加老师              |");
    puts("|         4、删除老师              |");
    puts("|         5、显示全部在校老师      |");
    puts("|         6、显示全部离职老师      |");
    puts("|         7、解锁老师状态          |");
    puts("|         8、退出系统              |");
    puts("-----------------------------------");
    printf("请输入指令：");
    char cmd = getch();
    printf("%c\n",cmd);
    return cmd;
}



// 退出校长子系统 
void exit_head(void)
{
	save_tch();
	return;
}

// 进入校长子系统
void head_start(void)
{
    for(;;)
    {
		load_tch();
        switch(head_menu())
        {
            case '1': reset_tch_pw();break;
            case '2': reset_head_pw();break;
            case '3': add_tch();break;
            case '4': del_tch();break;
            case '5': show_in_tch();break;
            case '6': show_out_tch();break;
            case '7': unlock_tch();break;
            case '8': exit_head();return;
        }
    }
}






